package spring_learn.a20;

import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;


/**
 * HandlerMethodArgumentResolver是解析参数上注解的处理器
 * 主要有两个方法：
 * supportsParameter：判断这个参数是否需要被处理
 * resolveArgument：具体的处理逻辑，返回的值会被赋值给具体的参数
 */


// 自定义注解处理器------解析token注解，从请求头中获取对应的token值并且赋值给加了该注解的对象
public class TokenArgumentResolver implements HandlerMethodArgumentResolver {
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        Token parameterAnnotation = parameter.getParameterAnnotation(Token.class);
        return parameterAnnotation!=null;
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        return webRequest.getHeader("token");
    }
}
